package p203;

import node.ListNode;
import node.ListNodeManager;

/**
 * 203. 移除链表元素
 * 删除链表中等于给定值 val 的所有节点。
 * <p>
 * 示例:
 * <p>
 * 输入: 1->2->6->3->4->5->6, val = 6
 * 输出: 1->2->3->4->5
 * 通过次数116,491提交次数249,961
 *****/
public class Solution {

    public static void main(String[] args) {
        int[] nums = {1, 6, 6, 3, 6, 5};
        ListNode head = ListNodeManager.createListNodeByArray(nums);

        ListNodeManager.printlnNode(removeElements(head, 6));

    }

    //    public static ListNode removeElements(ListNode head, int val) {
//        ListNode tempt = new ListNode(0);
//        tempt.next = head;
//        ListNode root = tempt;
//        while (tempt != null && tempt.next != null) {
//            if (tempt.next.val == val) {
//                tempt.next = tempt.next.next;
//            } else {
//                tempt = tempt.next;
//            }
//        }
//
//        return root.next;
//
//    }
//    public static ListNode removeElements(ListNode head, int val) {
//        if (head == null)
//            return head;
//        head.next = removeElements(head.next, val);
//        if (head.val == val) {
//            return head.next;
//        }
//        return head;
//    }


    public static ListNode removeElements(ListNode head, int val) {
        //删除值相同的头结点后，可能新的头结点也值相等，用循环解决
        while (head != null && head.val == val) {
            head = head.next;
        }
        if (head == null)
            return head;
        ListNode prev = head;
        //确保当前结点后还有结点
        while (prev.next != null) {
            if (prev.next.val == val) {
                prev.next = prev.next.next;
            } else {
                prev = prev.next;
            }
        }
        return head;

    }

}
